#include "byte_fifo.h"


// 初始化FIFO
void byte_fifo_init(ByteFifo *fifo)
{
    fifo->head = 0;
    fifo->tail = 0;
    fifo->is_full = false;
}

// 判断FIFO是否为空
bool byte_fifo_is_empty(ByteFifo *fifo)
{
    return (fifo->head == fifo->tail) && !fifo->is_full;
}

// 判断FIFO是否已满
bool byte_fifo_is_full(ByteFifo *fifo)
{
    return fifo->is_full;
}

// 向FIFO写入数据（中断中使用）
void byte_fifo_write(ByteFifo *fifo, uint8_t data)
{
    fifo->buffer[fifo->tail] = data;
    fifo->tail = (fifo->tail + 1) & (FIFO_SIZE - 1); // 循环指针

    if (fifo->tail == fifo->head)
    {
        fifo->is_full = true; // 缓冲区满
    }
}

// 从FIFO读取数据（任务中使用）
uint8_t byte_fifo_read(ByteFifo *fifo)
{
    if (byte_fifo_is_empty(fifo))
    {
        return 0xFF; // 返回无效数据（可根据需求修改）
    }

    uint8_t data = fifo->buffer[fifo->head];
    fifo->head = (fifo->head + 1) & (FIFO_SIZE - 1); // 循环指针
    fifo->is_full = false;                           // 清除满标志
    return data;
}
